package com.atguigu.tingshu.search.service.impl;

import com.atguigu.tingshu.album.client.AlbumClientFeign;
import com.atguigu.tingshu.common.constant.SystemConstant;
import com.atguigu.tingshu.model.album.AlbumAttributeValue;
import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.model.album.BaseCategoryView;
import com.atguigu.tingshu.model.search.AlbumInfoIndex;
import com.atguigu.tingshu.model.search.AttributeValueIndex;
import com.atguigu.tingshu.model.user.UserInfo;
import com.atguigu.tingshu.search.dao.AlbumInfoDao;
import com.atguigu.tingshu.search.service.ItemService;
import com.atguigu.tingshu.user.client.UserClientFeign;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;


/***
 * es写操作服务接口类
 */
@Slf4j
@Service
public class ItemServiceImpl implements ItemService {


    @Autowired
    private AlbumInfoDao albumInfoDao;

    @Autowired
    private AlbumClientFeign albumClientFeign;

    @Autowired
    private UserClientFeign userClientFeign;

    /**
     * es写入专辑信息
     * @param albumId
     */
    @Override
    public void addAlbumFromMysql(Long albumId) {
        //es实体类初始化
        AlbumInfoIndex albumInfoIndex = new AlbumInfoIndex();
        //根据id获取专辑信息
        AlbumInfo albumInfo = albumClientFeign.getAlbumInfo(albumId);
        try {
            if (albumInfo == null || albumInfo.getId() ==null){
                return;
            }
            //查询es中是否存在这个专辑
            Optional<AlbumInfoIndex> optional = albumInfoDao.findById(albumId);
            if (optional.isPresent()){
                //存在
                albumInfoIndex = optional.get();
            }
            //设置属性
            albumInfoIndex.setId(albumInfo.getId());
            albumInfoIndex.setAlbumTitle(albumInfo.getAlbumTitle());
            albumInfoIndex.setAlbumIntro(albumInfo.getAlbumIntro());
            albumInfoIndex.setCoverUrl(albumInfo.getCoverUrl());
            albumInfoIndex.setIncludeTrackCount(albumInfo.getIncludeTrackCount());
            albumInfoIndex.setIsFinished(albumInfo.getIsFinished().toString());
            albumInfoIndex.setPayType(albumInfo.getPayType());
            albumInfoIndex.setCreateTime(new Date());
            //去用户微服务查询作者的name
            UserInfo userInfo = userClientFeign.getUserInfo(albumInfo.getUserId());
            albumInfoIndex.setAnnouncerName(userInfo.getNickname());
            //根据三级分类查询一二三级分类
            BaseCategoryView baseCategoryView =
                    albumClientFeign.getBaseCategoryView(albumInfo.getCategory3Id());
            albumInfoIndex.setCategory1Id(baseCategoryView.getCategory1Id());
            albumInfoIndex.setCategory2Id(baseCategoryView.getCategory2Id());
            albumInfoIndex.setCategory3Id(baseCategoryView.getCategory3Id());
            //专辑的标签数据
            List<AlbumAttributeValue> albumInfoAttributeList =
                    albumClientFeign.getAlbumInfoAttributeList(albumId);
            albumInfoIndex.setAttributeValueIndexList(
                    albumInfoAttributeList.stream().map(albumAttributeValue -> {
                        AttributeValueIndex attributeValueIndex = new AttributeValueIndex();
                        attributeValueIndex.setAttributeId(albumAttributeValue.getAttributeId());
                        attributeValueIndex.setValueId(albumAttributeValue.getValueId());
                        return attributeValueIndex;
                    }).collect(Collectors.toList())
            );
            //查询专辑的统计信息
            Map<String, Object> albumInfoStat =
                    albumClientFeign.getAlbumInfoStat(albumId);
            albumInfoIndex.setPlayStatNum(Long.valueOf(albumInfoStat.get(SystemConstant.ALBUM_STAT_PLAY).toString()));
            albumInfoIndex.setSubscribeStatNum(Long.valueOf(albumInfoStat.get(SystemConstant.ALBUM_STAT_SUBSCRIBE).toString()));
            albumInfoIndex.setBuyStatNum(Long.valueOf(albumInfoStat.get(SystemConstant.ALBUM_STAT_BROWSE).toString()));
            albumInfoIndex.setCommentStatNum(Long.valueOf(albumInfoStat.get(SystemConstant.ALBUM_STAT_COMMENT).toString()));
            //保存
            albumInfoDao.save(albumInfoIndex);
        }catch (Exception e){

        }

    }

    /**
     * 删除es专辑信息
     * @param albumId
     */
    @Override
    public void removeAlbumFrommysql(Long albumId) {
        albumInfoDao.deleteById(albumId);
    }
}
